package javagame;

import gameobjects.*;
import gameobjects.Objekat.oblik;
import gameobjects.PowerUp.tip_powerup;
import gameobjects.Protivnik.tip_protivnika;

import gamesound.Zvuk;
import gamethreads.*;

import java.util.ArrayList;
import java.util.Iterator;

import javagame.Play.game_mode;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

public class Level1Bonus extends Level {
	private static final int brProtivnika = 4;
	private static final int brPowerUp = 2;
	private static final int brNagrada = 1;
	
	private Image[] world;
	private Animation svet;
	private PowerUp [] nagrada;
	private int[] duration;
	private int[] duration2;
	private int[] duration3;
	
	public Level1Bonus (int state) {}

	public int getID() {
		return 7;
	}

	public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
		Nivo.addLevel(this);
		tenkIgrac = Igrac.dohvIgraca();
		tenkIgrac2 = Igrac2.dohvIgraca();
		protivnik = new Protivnik[brProtivnika];
		protivnikT = new ProtivnikT[brProtivnika];
		budzenje = new PowerUp[brPowerUp];
		nagrada = new PowerUp[brNagrada];
		kolizija = new Kolizija();
		zvuk = Zvuk.dohvZvuk();
		quit = false;
		shot = false;
		shot2 = false;
		otvoriProlaz = false;
		duration = new int[2];
		duration2 = new int[2];
		duration3 = new int[2];
		duration[0] = duration[1] = 200;
		duration2[0] = duration2[1] = 2000;
		duration3[0]= duration3[1] = 500;
		world = new Image[2];
		world[0] = new Image("res/level1_bonus.png");
		world[1] = new Image("res/level1_bonus2.png");
		svet = new Animation(world, duration3, true);
		dodajObjekte();	
		initProtivnika();
		initPowerUp();
		kreiraniProtivnici = false;
	}
	
	public void initProtivnika () throws SlickException {
		Image [] eksp = {new Image("res/bum.png"), new Image("res/bum2.png")};
		protivnik[0] = new Top(tenkIgrac, tenkIgrac2, this);
		protivnik[1] = new Top(tenkIgrac, tenkIgrac2, this);
		protivnik[2] = new Brod(tenkIgrac, tenkIgrac2, this);
		protivnik[3] = new Podmornica(tenkIgrac, tenkIgrac2, this);
		for (int i=0; i<protivnik.length; i++) {
			protivnik[i].setAnimation();
			protivnik[i].setEksplozija(new Animation(eksp, duration2, true));
			protivnik[i].setMeci(new ArrayList<Metak>());
		}
		kreiraniProtivnici = true;
	}
	
	public void postaviProtivnike () {
		if(mod == game_mode.MOD1) {
			protivnik[0].setProtivnikX(800);
			protivnik[0].setProtivnikY(100);
			protivnik[1].setProtivnikX(800);
			protivnik[1].setProtivnikY(618);
			protivnik[2].setProtivnikX(50);
			protivnik[2].setProtivnikY(350);
			protivnik[3].setProtivnikX(350);
			protivnik[3].setProtivnikY(450);
			for (int i=0; i<protivnik.length; i++) {
				protivnik[i].setImaDvaIgraca(dvaIgraca);
				protivnik[i].postaviTezinu();
			}
		}
	}
	
	public void initPowerUp () throws SlickException {
		Image stit = new Image("res/stit.png");
		Image zvezda = new Image("res/zvezda.png");
		Image dolar = new Image("res/bod.png");
		budzenje[0] = new PowerUp(stit, dolar, tip_powerup.SHIELD);
		budzenje[1] = new PowerUp(stit, dolar, tip_powerup.SHIELD);
		nagrada[0] = new PowerUp(zvezda, dolar, tip_powerup.STAR);
		nagrada[0].setxKoord(740);
		nagrada[0].setyKoord(368);
	}
	
	public void resetProlaz () {
	}
	
	public void oziviSve () {
		super.oziviSve();
		nagrada[0].setPokupljen(false);
	}
	
	public void dodajObjekte() {
		//drvece
		kolizija.dodajKvadrat(590, 230);
		kolizija.dodajKvadrat(870, 115);
		kolizija.dodajKvadrat(580, 575);
		kolizija.dodajKvadrat(875, 650);		
		//reka
		kolizija.dodajPravougaonik(512, 345, 204, 100);
		kolizija.dodajPravougaonik(820, 345, 204, 100);
		//more
		kolizija.dodajPravougaonik(0, 0, 512, 768);
		//zid
		kolizija.dodajPravougaonik(512, 0, 512, 50);
		
		//obala
		kolizija.dodajPravougaonikVoda(512, 0, 512, 345);
		kolizija.dodajPravougaonikVoda(512, 445, 512, 325);
		//most
		kolizija.dodajPravougaonikVoda(716, 345, 104, 100);
	}

	public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
		svet.draw();
		if(mod == game_mode.MOD1) {
			for (int i=0; i<protivnik.length; i++) {
				if (protivnik[i].isUbiven() == true) {
					if(protivnik[i].getVrsta() == tip_protivnika.CRNI) {
						if (budzenje[i].isPokupljen() == false) {
							budzenje[i].setxKoord(protivnik[i].getProtivnikX());
							budzenje[i].setyKoord(protivnik[i].getProtivnikY());
							budzenje[i].crtaj();
						}
					}
					if(protivnik[i].getVrsta() == tip_protivnika.TOP) {
						if (budzenje[i].isPokupljen() == false) {
							budzenje[i].setxKoord(protivnik[i].getProtivnikX());
							budzenje[i].setyKoord(protivnik[i].getProtivnikY());
							budzenje[i].crtaj();
						}
					}
					protivnik[i].eksplodiraj();
				}
			}
		}
		/*if(mod == game_mode.MOD2) {
			for (int i=0; i<protivnikT.length; i++) {
				if (protivnikT[i].isUbiven() == true) {
					if(protivnikT[i].getVrsta() == tip_protivnika.CRNI) {
						if (budzenje[i].isPokupljen() == false) {
							budzenje[i].setxKoord(protivnikT[i].getProtivnikX());
							budzenje[i].setyKoord(protivnikT[i].getProtivnikY());
							budzenje[i].crtaj();
						}
					}
					if(protivnikT[i].getVrsta() == tip_protivnika.TOP) {
						if (budzenje[i].isPokupljen() == false) {
							budzenje[i].setxKoord(protivnikT[i].getProtivnikX());
							budzenje[i].setyKoord(protivnikT[i].getProtivnikY());
							budzenje[i].crtaj();
						}
					}
					protivnikT[i].eksplodiraj();
				}
			}
		}*/
		
		if (krajNivoa()) {
			if (nagrada[0].isPokupljen() == false)
				nagrada[0].crtaj();
		}
		if (tenkIgrac.isZiv()) {
			tenkIgrac.crtaj(g);
		}
		else
			tenkIgrac.eksplodiraj();
		if (dvaIgraca) {
			if (tenkIgrac2.isZiv()) {
				tenkIgrac2.crtaj(g);
			}
			else
				tenkIgrac2.eksplodiraj();
		}
		
		if (shot) {
			for (Iterator<Metak> i = tenkIgrac.getMetak().iterator(); i.hasNext();) {
				Metak m = i.next();
				m.crtaj(g);
			}
			for (Iterator<Metak> i = tenkIgrac.getRakete().iterator(); i.hasNext();) { //crtanje raketa(sekundarnog oruzja)
				Metak r = i.next();
				r.crtaj(g);
			}
		}
		if (shot2) {
			for (Iterator<Metak> i = tenkIgrac2.getMetak().iterator(); i.hasNext();) { //crtanje metkova
				Metak m = i.next();
				m.crtaj(g);
			}
			for (Iterator<Metak> i = tenkIgrac2.getRakete().iterator(); i.hasNext();) { //crtanje raketa(sekundarnog oruzja)
				Metak r = i.next();
				r.crtaj(g);
			}
		}
		if(mod == game_mode.MOD1) {
			for (int i=0; i<protivnik.length; i++) {
				if (protivnik[i].isUbiven() == false) protivnik[i].crtaj(g);
				for (Iterator<Metak> j = protivnik[i].getMeci().iterator(); j.hasNext();) {
					Metak m = j.next();
					m.crtaj(g);
				}
			}
		}
/*		if(mod == game_mode.MOD2) {
			for (int i=0; i<protivnikT.length; i++) {
				if (protivnikT[i].isUbiven() == false) protivnikT[i].crtaj();
				for (Iterator<Metak> j = protivnikT[i].getMeci().iterator(); j.hasNext();) {
					Metak m = j.next();
					m.crtaj(g);
				}
			}
		}*/
		if (quit == true) {
			crtajPauzu(g);
		}
	}
	
	
	
	public void kretanje (int delta) throws SlickException {
		if (mod == game_mode.MOD1)
		for (int i=0; i<protivnik.length; i++) {
			if (protivnik[i].isUbiven() == false && (tenkIgrac.isZiv() || tenkIgrac2.isZiv()))
					protivnik[i].protivnikAI(delta, kolizija, true);
			for (Iterator<Metak> j = protivnik[i].getMeci().iterator(); j.hasNext();) { // kretanje metka protivnika
				Metak m = j.next();
				m.pomerajMetka(delta);
				if (m.getMetakX()>tenkIgrac.getTenkX() 
						&& m.getMetakX()<(tenkIgrac.getTenkX() + 50) 
						&& m.getMetakY()>tenkIgrac.getTenkY() 
						&& m.getMetakY()<(tenkIgrac.getTenkY() + 50)) {
					if(tenkIgrac.getTenk_HP() >= 0 && tenkIgrac.isShield_flag() == false){
						tenkIgrac.setTenk_HP(tenkIgrac.getTenk_HP() - 1);		
						zvuk.eksplodiraj();
						j.remove();
					}
					else if(tenkIgrac.isShield_flag() == true){
						tenkIgrac.setShield_flag(false);
						zvuk.eksplodiraj();
						j.remove();
					}
				}
				if (dvaIgraca && tenkIgrac2.isZiv() && m.getMetakX()>tenkIgrac2.getTenkX() 
						&& m.getMetakX()<(tenkIgrac2.getTenkX() + 50) 
						&& m.getMetakY()>tenkIgrac2.getTenkY() 
						&& m.getMetakY()<(tenkIgrac2.getTenkY() + 50)) {
					if(tenkIgrac2.getTenk_HP() >= 0 && tenkIgrac2.isShield_flag() == false){
						tenkIgrac2.setTenk_HP(tenkIgrac2.getTenk_HP() - 1);		
						zvuk.eksplodiraj();
						j.remove();
					}
					else if(tenkIgrac2.isShield_flag() == true){
						tenkIgrac2.setShield_flag(false);
						zvuk.eksplodiraj();
						j.remove();
					}
				}
				if(tenkIgrac.getTenk_HP() <= 0) {
					tenkIgrac.setZiv(false);
				}
				if(dvaIgraca && tenkIgrac2.getTenk_HP() <= 0) {
					tenkIgrac2.setZiv(false);
				}
				if (pogodioDrvo(m)) j.remove();
				else if (m.getMetakY()<50 || m.getMetakY()>768 
						|| m.getMetakX()<0 || m.getMetakX()>1024) 
					j.remove();
			}
		}
		if (mod == game_mode.MOD2)
			for (int i=0; i<protivnikT.length; i++) {
				protivnikT[i].setDelta(delta);
				for (Iterator<Metak> j = protivnikT[i].getMeci().iterator(); j.hasNext();) { // kretanje metka protivnika
					Metak m = j.next();
					m.pomerajMetka(delta);
					if (m.getMetakX()>tenkIgrac.getTenkX() 
							&& m.getMetakX()<(tenkIgrac.getTenkX() + 50) 
							&& m.getMetakY()>tenkIgrac.getTenkY() 
							&& m.getMetakY()<(tenkIgrac.getTenkY() + 50)) {
						if(tenkIgrac.getTenk_HP() >= 0 && tenkIgrac.isShield_flag() == false){
							tenkIgrac.setTenk_HP(tenkIgrac.getTenk_HP() - 1);		
							zvuk.eksplodiraj();
							j.remove();
						}
						else if(tenkIgrac.isShield_flag() == true){
							tenkIgrac.setShield_flag(false);
							zvuk.eksplodiraj();
							j.remove();
						}
					}
					if(tenkIgrac.getTenk_HP() <= 0) tenkIgrac.setZiv(false);
					if (pogodioDrvo(m)) j.remove();
					if (m.getMetakY()<50 || m.getMetakY()>768
							|| m.getMetakX()<0 || m.getMetakX()>1024) 
						j.remove();
				}
			}
	}
	
	public  boolean pogodioDrvo (Metak m) {
		for(int i=0; i<kolizija.getObjekatList().size(); i++) {
			Objekat tempOb = kolizija.getObjekatList().get(i);
			if(tempOb.getObl() == oblik.KVADRAT) {
				if ((m.getMetakX() <= tempOb.getxOb()+tempOb.getSize()
			    		 && m.getMetakX() >= tempOb.getxOb()
			    		 && m.getMetakY() <= tempOb.getyOb()+tempOb.getSize()
			    		 && m.getMetakY() >= tempOb.getyOb()))
					return true;
			}
		}
		return false;
	}
	
	public  boolean pogodioDrvoRaketa (Metak r) {
		for(int i=0; i<kolizija.getObjekatList().size(); i++) {
			Objekat tempOb = kolizija.getObjekatList().get(i);
			if(tempOb.getObl() == oblik.KVADRAT) {
				if ((r.getSmer()==0 || r.getSmer()==1)
						 && (r.getMetakX() + 6.5 <= tempOb.getxOb()+tempOb.getSize()
			    		 && r.getMetakX() + 6.5 >= tempOb.getxOb()
			    		 && r.getMetakY() + 15 <= tempOb.getyOb()+tempOb.getSize()
			    		 && r.getMetakY() + 15 >= tempOb.getyOb()))
					return true;
				else if ((r.getSmer()==2 || r.getSmer()==3)
						 && (r.getMetakX() + 15 <= tempOb.getxOb()+tempOb.getSize()
			    		 && r.getMetakX() + 15 >= tempOb.getxOb()
			    		 && r.getMetakY() + 6.5 <= tempOb.getyOb()+tempOb.getSize()
			    		 && r.getMetakY() + 6.5 >= tempOb.getyOb()))
					return true;
			}
		}
		return false;
	}
	
	public void pokupi () {
		super.pokupi();
		if (krajNivoa()) {
			for (int i=0; i<nagrada.length; i++) {
				PowerUp pu = nagrada[i];
				if (pu.isPokupljen()==false 
						&& (pu.getxKoord())<(tenkIgrac.getTenkX()+50) 
						&& (pu.getxKoord()+50)>tenkIgrac.getTenkX()
						&& (pu.getyKoord())<(tenkIgrac.getTenkY()+50) 
						&& (pu.getyKoord()+50)>tenkIgrac.getTenkY() ) {
					if(pu.getVrsta() == tip_powerup.STAR){
						pu.setPokupljen(true);
						tenkIgrac.setZvezda(true);
						tenkIgrac.setAnimation();
					}
				}
				if (dvaIgraca && pu.isPokupljen()==false 
						&& (pu.getxKoord())<(tenkIgrac2.getTenkX()+50) 
						&& (pu.getxKoord()+50)>tenkIgrac2.getTenkX()
						&& (pu.getyKoord())<(tenkIgrac2.getTenkY()+50) 
						&& (pu.getyKoord()+50)>tenkIgrac2.getTenkY() ) {
					if(pu.getVrsta() == tip_powerup.STAR){
						pu.setPokupljen(true);
						tenkIgrac2.setZvezda(true);
						tenkIgrac2.setAnimation();
					}
				}
			}
		}
	}
	
	public void kretanjeMetka (int delta) { //kretanje metka samog igraca
		for (Iterator<Metak> i = tenkIgrac.getMetak().iterator(); i.hasNext();) {
			Metak m = i.next();
			m.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].getVrsta() == tip_protivnika.BROD) {
						if (protivnik[j].isUbiven() == false
								&& (protivnik[j].getSmer() == 0 || protivnik[j].getSmer() == 1)
								&& m.getMetakX() > protivnik[j].getProtivnikX() 
								&& m.getMetakX() < (protivnik[j].getProtivnikX() + 50) 
								&& m.getMetakY() > protivnik[j].getProtivnikY() 
								&& m.getMetakY() < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 1);
							if(protivnik[j].getHP() == 0) {
								protivnik[j].setUbiven(true); 
								tenkIgrac.setBodovi(bodovi[3]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
						if (protivnik[j].isUbiven() == false
								&& (protivnik[j].getSmer() == 2 || protivnik[j].getSmer() == 3)
								&& m.getMetakX() > protivnik[j].getProtivnikX() 
								&& m.getMetakX() < (protivnik[j].getProtivnikX() + 200) 
								&& m.getMetakY() > protivnik[j].getProtivnikY() 
								&& m.getMetakY() < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 1);
							if(protivnik[j].getHP() == 0) {
								protivnik[j].setUbiven(true); 
								tenkIgrac.setBodovi(bodovi[3]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					else if (protivnik[j].getVrsta() == tip_protivnika.PODMORNICA) {
						Podmornica pod = (Podmornica) protivnik[j];
						if (pod.isUbiven() == false
								&& pod.isVanVode()
								&& m.getMetakX() > pod.getProtivnikX() 
								&& m.getMetakX() < pod.getProtivnikX() + 50 
								&& m.getMetakY() > pod.getProtivnikY() 
								&& m.getMetakY() < pod.getProtivnikY() + 100) {
							pod.setHP(pod.getHP() - 1);
							if(pod.getHP() == 0) {
								pod.setUbiven(true); 
								tenkIgrac.setBodovi(bodovi[4]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					else if (protivnik[j].isUbiven() == false 
							&& m.getMetakX() > protivnik[j].getProtivnikX() 
							&& m.getMetakX() < (protivnik[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnik[j].getProtivnikY() 
							&& m.getMetakY() < (protivnik[j].getProtivnikY() + 50)) {
						protivnik[j].setHP(protivnik[j].getHP() - 1);
						if(protivnik[j].getHP() == 0) {
							protivnik[j].setUbiven(true);
							if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
								tenkIgrac.setBodovi(bodovi[0]);
							if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
								tenkIgrac.setBodovi(bodovi[1]);
							if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
								tenkIgrac.setBodovi(bodovi[2]);
							if(j<brPowerUp)
								budzenje[j].izbaci();
						}
						zvuk.eksplodiraj();
						i.remove();
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& m.getMetakX() > protivnikT[j].getProtivnikX() 
							&& m.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnikT[j].getProtivnikY() 
							&& m.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 1);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() == 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioDrvo(m)) i.remove();
			else if (m.getMetakY()<50 || m.getMetakY()>768 || m.getMetakX()<0 || m.getMetakX()>1024) i.remove();
		}
	}
	
	public void kretanjeMetkaDva (int delta) { //kretanje metka samog igraca
		for (Iterator<Metak> i = tenkIgrac2.getMetak().iterator(); i.hasNext();) {
			Metak m = i.next();
			m.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].getVrsta() == tip_protivnika.BROD) {
						if (protivnik[j].isUbiven() == false
								&& (protivnik[j].getSmer() == 0 || protivnik[j].getSmer() == 1)
								&& m.getMetakX() > protivnik[j].getProtivnikX() 
								&& m.getMetakX() < (protivnik[j].getProtivnikX() + 50) 
								&& m.getMetakY() > protivnik[j].getProtivnikY() 
								&& m.getMetakY() < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 1);
							if(protivnik[j].getHP() == 0) {
								protivnik[j].setUbiven(true); 
								tenkIgrac2.setBodovi(bodovi[3]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
						if (protivnik[j].isUbiven() == false
								&& (protivnik[j].getSmer() == 2 || protivnik[j].getSmer() == 3)
								&& m.getMetakX() > protivnik[j].getProtivnikX() 
								&& m.getMetakX() < (protivnik[j].getProtivnikX() + 200) 
								&& m.getMetakY() > protivnik[j].getProtivnikY() 
								&& m.getMetakY() < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 1);
							if(protivnik[j].getHP() == 0) {
								protivnik[j].setUbiven(true); 
								tenkIgrac2.setBodovi(bodovi[3]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					else if (protivnik[j].getVrsta() == tip_protivnika.PODMORNICA) {
						Podmornica pod = (Podmornica) protivnik[j];
						if (pod.isUbiven() == false
								&& pod.isVanVode()
								&& m.getMetakX() > pod.getProtivnikX() 
								&& m.getMetakX() < pod.getProtivnikX() + 50 
								&& m.getMetakY() > pod.getProtivnikY() 
								&& m.getMetakY() < pod.getProtivnikY() + 100) {
							pod.setHP(pod.getHP() - 1);
							if(pod.getHP() == 0) {
								pod.setUbiven(true); 
								tenkIgrac2.setBodovi(bodovi[4]);
							}
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					else if (protivnik[j].isUbiven() == false 
							&& m.getMetakX() > protivnik[j].getProtivnikX() 
							&& m.getMetakX() < (protivnik[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnik[j].getProtivnikY() 
							&& m.getMetakY() < (protivnik[j].getProtivnikY() + 50)) {
						protivnik[j].setHP(protivnik[j].getHP() - 1);
						if(protivnik[j].getHP() == 0) {
							protivnik[j].setUbiven(true);
							if(protivnik[j].getVrsta() == tip_protivnika.SIVI) 
								tenkIgrac2.setBodovi(bodovi[0]);
							if(protivnik[j].getVrsta() == tip_protivnika.CRNI) 
								tenkIgrac2.setBodovi(bodovi[1]);
							if(protivnik[j].getVrsta() == tip_protivnika.TOP) 
								tenkIgrac2.setBodovi(bodovi[2]);
							if(j<brPowerUp)
								budzenje[j].izbaci();
						}
						zvuk.eksplodiraj();
						i.remove();
					}
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& m.getMetakX() > protivnikT[j].getProtivnikX() 
							&& m.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& m.getMetakY() > protivnikT[j].getProtivnikY() 
							&& m.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 1);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() == 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioDrvo(m)) i.remove();
			else if (m.getMetakY()<50 || m.getMetakY()>768 || m.getMetakX()<0 || m.getMetakX()>1024) i.remove();
		}
	}
	
	/*public void kretanjeRakete (int delta) { //kretanje sekundarnog oruzja samog igraca
		for (Iterator<Metak> i = tenkIgrac.getRakete().iterator(); i.hasNext();) {
			Metak r = i.next();
			r.pomerajMetka(delta);
			if(mod == game_mode.MOD1) {
				for (int j=0; j<protivnik.length; j++) {
					if (protivnik[j].getVrsta() == tip_protivnika.BROD) {
						if (protivnik[j].isUbiven() == false
								&& (protivnik[j].getSmer() == 0 || protivnik[j].getSmer() == 1)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 200)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							zvuk.eksplodiraj();
							i.remove();
						}
						if (protivnik[j].isUbiven() == false
								&& (protivnik[j].getSmer() == 2 || protivnik[j].getSmer() == 3)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 200) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					else if (protivnik[j].getVrsta() == tip_protivnika.PODMORNICA) {
						Podmornica pod = (Podmornica) protivnik[j];
						if (pod.isUbiven() == false
								&& pod.isVanVode()
								&& r.getMetakX() + 15 > pod.getProtivnikX() 
								&& r.getMetakX() + 15 < pod.getProtivnikX() + 50 
								&& r.getMetakY() + 6.5 > pod.getProtivnikY() 
								&& r.getMetakY() + 6.5 < pod.getProtivnikY() + 100) {
							pod.setHP(pod.getHP() - 5);
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					else if (protivnik[j].isUbiven() == false) {
						if ((r.getSmer()==0 || r.getSmer()==1)
								&& r.getMetakX() + 6.5 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 6.5 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 15 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 15 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							zvuk.eksplodiraj();
							i.remove();
						}
						else if ((r.getSmer()==2 || r.getSmer()==3)
								&& r.getMetakX() + 15 > protivnik[j].getProtivnikX() 
								&& r.getMetakX() + 15 < (protivnik[j].getProtivnikX() + 50) 
								&& r.getMetakY() + 6.5 > protivnik[j].getProtivnikY() 
								&& r.getMetakY() + 6.5 < (protivnik[j].getProtivnikY() + 50)) {
							protivnik[j].setHP(protivnik[j].getHP() - 5);
							zvuk.eksplodiraj();
							i.remove();
						}
					}
					if(protivnik[j].getHP() <= 0) protivnik[j].setUbiven(true);
				}
			}
			if(mod == game_mode.MOD2) {
				for (int j=0; j<protivnikT.length; j++) {
					if (protivnikT[j].isUbiven() == false 
							&& r.getMetakX() > protivnikT[j].getProtivnikX() 
							&& r.getMetakX() < (protivnikT[j].getProtivnikX() + 50) 
							&& r.getMetakY() > protivnikT[j].getProtivnikY() 
							&& r.getMetakY() < (protivnikT[j].getProtivnikY() + 50)) {
						protivnikT[j].setHP(protivnikT[j].getHP() - 5);
						zvuk.eksplodiraj();
						i.remove();
					}
					if(protivnikT[j].getHP() <= 0) protivnikT[j].setUbiven(true);
				}
			}
			if (pogodioDrvoRaketa(r)) i.remove();
			else if (r.getMetakY()<50 || r.getMetakY()>768 || r.getMetakX()<0 || r.getMetakX()>1024) i.remove();
		}
	}*/
	
	public void moveRight (int delta, int ivica) {
		tenkIgrac.setTenk(tenkIgrac.getMovingRight());
		tenkIgrac.setAutoUpdate(true);
		tenkIgrac.setTenkX(tenkIgrac.getTenkX() + delta * .1f * 1.5f);
		if (krajNivoa() && (tenkIgrac.getTenkX() >= ivica)) {
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() + delta * .1f * 1.5f);
		}
		if (tenkIgrac.getTenkX() > ivica) {
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		}
		if (tenkIgrac.getTenkX()>ivica && tenkIgrac2.getTenkX() > ivica 
				&& tenkIgrac.getTenkY()>=(tenkIgrac2.getTenkY()-50) && tenkIgrac.getTenkY()<=(tenkIgrac2.getTenkY()+50))
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		if (dvaIgraca && !mozeIgrac()) {
			tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD1) {
			if(!mozeTenk(kolizija.getObjekatList()))
				tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD2) {
			if(!mozeTenkPT(kolizija.getObjekatList()))
				tenkIgrac.setTenkX(tenkIgrac.getTenkX() - delta * .1f * 1.5f);
		}
	}
	
	public void moveRightDva (int delta, int ivica) {
		tenkIgrac2.setTenk(tenkIgrac2.getMovingRight());
		tenkIgrac2.setAutoUpdate(true);
		tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() + delta * .1f * 1.5f);
		if (krajNivoa() && (tenkIgrac2.getTenkX() >= ivica)) {
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() + delta * .1f * 1.5f);
		}
		if (tenkIgrac2.getTenkX() > ivica) {
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		}
		if (tenkIgrac.getTenkX()>ivica && tenkIgrac2.getTenkX() > ivica 
				&& tenkIgrac2.getTenkY()>=(tenkIgrac.getTenkY()-50) && tenkIgrac2.getTenkY()<=(tenkIgrac.getTenkY()+50))
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		if (dvaIgraca && !mozeIgrac()) {
			tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD1) {
			if(!mozeTenkDva(kolizija.getObjekatList()))
				tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		}
		if(mod == game_mode.MOD2) {
			if(!mozeTenkDvaPT(kolizija.getObjekatList()))
				tenkIgrac2.setTenkX(tenkIgrac2.getTenkX() - delta * .1f * 1.5f);
		}
	}

	public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
		Input input = gc.getInput();
		Nivo.setNivo(7);
		if (!zvuk.dohvTekucu().playing()) {
			zvuk.pustiMuziku();
		}
		if (!dvaIgraca) {
			if (tenkIgrac.isZiv() == false) {
				Nivo.setVerticalLevel(true);
				tenkIgrac.ozivi();
				oziviSve();
				sbg.enterState(4);
			}
		}
		else {
			if (tenkIgrac.isZiv() == false && tenkIgrac2.isZiv() == false) {
				Nivo.setVerticalLevel(true);
				tenkIgrac.ozivi();
				tenkIgrac2.ozivi();
				oziviSve();
				sbg.enterState(4);
			}
		}
		fullScreenOnOff(gc);
		if (quit==false) {
			kretanje(constDelta);
			pokupi();
			
			if (shot) {
				kretanjeMetka(constDelta);
				//kretanjeRakete(constDelta);
			}
			if (shot2) {
				kretanjeMetkaDva(constDelta);
				//kretanjeRakete(constDelta);
			}
			
			//tenkIgrac.odbrojavaj();
			
			//================prvi igrac
			//shot
			if(input.isKeyPressed(Input.KEY_SPACE) && tenkIgrac.isZiv()==true) {
				zvuk.pucaj();
				shot = true;
				tenkIgrac.pucaj(true);
			}
			//secundary shot
			if(input.isKeyPressed(Input.KEY_LCONTROL) && tenkIgrac.isZiv()==true) {
				if (tenkIgrac.isRaketa()) {
					shot = true;
					tenkIgrac.pucajRaketu();
				}
			}
			//up
			if(input.isKeyDown(Input.KEY_UP) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkX()<=1024) {
				moveUp(constDelta, 50);
			}
			//down
			else if(input.isKeyDown(Input.KEY_DOWN) && tenkIgrac.isZiv()==true && tenkIgrac.getTenkX()<=1024) {
				moveDown(constDelta, 718);
			}
			
			//left
			else if(input.isKeyDown(Input.KEY_LEFT) && tenkIgrac.isZiv()==true) {
				moveLeft(constDelta, 0);
				if (tenkIgrac.getTenkX()<974) {
					tenkIgrac.setPresao(false);
				}
			}
			//right
			else if(input.isKeyDown(Input.KEY_RIGHT) && tenkIgrac.isZiv()==true) {
				moveRight(constDelta, 974);
				if (tenkIgrac.getTenkX()>974) {
					if (tenkIgrac2.isPresao()) {
						tenkIgrac.noviLevel(dvaIgraca);
						tenkIgrac2.noviLevel();
						sbg.enterState(5);
					}
					else {
						tenkIgrac.setPresao(true);
					}
					if (!dvaIgraca || tenkIgrac2.isZiv() == false) {
						tenkIgrac.noviLevel(dvaIgraca);
						sbg.enterState(5);
					}
				}
			}
			else {
				tenkIgrac.setAutoUpdate(false);
			}
			//============drugi igrac
			if (dvaIgraca) {
				//shot
				if(input.isControlPressed(6, input.getControllerCount()-1) && tenkIgrac2.isZiv()==true) {
					zvuk.pucaj();
					shot2 = true;
					tenkIgrac2.pucaj(true);
				}
				//secundary shot
				if(input.isControlPressed(5, input.getControllerCount()-1) && tenkIgrac2.isZiv()==true) {
					if (tenkIgrac2.isRaketa()) {
						shot2 = true;
						tenkIgrac2.pucajRaketu();
					}
				}
				//up
				if(input.isControllerUp(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkX()<=1024) {
					moveUpDva(constDelta, 50);
				}
				//down
				else if(input.isControllerDown(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true && tenkIgrac2.getTenkX()<=1024) {
					moveDownDva(constDelta, 718);
				}			
				//left
				else if(input.isControllerLeft(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true) {
					moveLeftDva(constDelta, 0);
					if (tenkIgrac2.getTenkX()<974) {
						tenkIgrac2.setPresao(false);
					}
				}
				//right
				else if(input.isControllerRight(Input.ANY_CONTROLLER) && tenkIgrac2.isZiv()==true) {
					moveRightDva(constDelta, 974);
					if (tenkIgrac2.getTenkX()>974) {
						if (tenkIgrac.isPresao()) {
							tenkIgrac.noviLevel(dvaIgraca);
							tenkIgrac2.noviLevel();
							sbg.enterState(5);
						}
						else {
							tenkIgrac2.setPresao(true);
						}
						if (tenkIgrac.isZiv() == false) {
							tenkIgrac2.noviLevel();
							sbg.enterState(5);
						}
					}
				}
				else {
					tenkIgrac2.setAutoUpdate(false);
				}
				
				if (input.isControlPressed(13, input.getControllerCount()-1)) {
					quit = true;
				}
			}
			
			//escape
			if (input.isKeyDown(Input.KEY_ESCAPE)) {
				quit = true;
			}
		}
		//when escape i clicked
		if (quit == true) {
			if (input.isKeyDown(Input.KEY_R)) {
				quit = false;
			}
			if (input.isKeyDown(Input.KEY_M)) {
				mainMenu(sbg);
			}
			if (input.isKeyDown(Input.KEY_Q)) {
				gc.exit();
			}
		}
	}

}
